package com.example.server.web.utils;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import au.com.bytecode.opencsv.CSVWriter;
import com.example.server.web.exception.CustomException;

public class ExcelUtil {
    public static void exportToCSV(List<?> data, List<String> headers, String filePath) {
        try (CSVWriter writer = new CSVWriter(new FileWriter(filePath))) {
            // 添加标题行
            String[] headerArray = headers.toArray(new String[0]);
            writer.writeNext(headerArray);

            // 添加数据行
            for (Object item : data) {
                String[] rowData = convertToStringArray(item);
                writer.writeNext(rowData);
            }
            System.out.println("CSV文件导出成功！");
        } catch (IOException e) {
            throw new CustomException("CSV文件导出失败:" + e.getMessage());
        }
    }

    private static String[] convertToStringArray(Object item) {
        List<String> rowData = new ArrayList<>();
        // 将对象转换为字符串数组，根据实际需求实现该方法

        if (item instanceof List<?>) {
            // 处理包含多个属性的对象列表
            List<?> itemList = (List<?>) item;
            for (Object obj : itemList) {
                if (obj instanceof BigDecimal) {
                    rowData.add(((BigDecimal) obj).toString()); // 处理BigDecimal类型
                } else if (obj instanceof Integer) {
                    rowData.add(String.valueOf(obj)); // 处理Integer类型
                } else if (obj instanceof Double) {
                    rowData.add(String.valueOf(obj)); // 处理double类型
                } else if (obj instanceof String) {
                    rowData.add((String) obj); // 处理String类型
                } else {
                    rowData.add(""); // 其他类型处理为空字符串
                }
            }
        } else {
            // 处理单个对象
            if (item instanceof Double) {
                rowData.add(String.valueOf(item)); // 处理double类型
            } else if (item instanceof String) {
                rowData.add((String) item); // 处理String类型
            }
        }

        return rowData.toArray(new String[0]);
    }


//    public static void main(String[] args) {
//        // 创建标题行
//        List<String> headers = new ArrayList<>();
//        headers.add("fact_id");
//        headers.add("attitude_score");
//        headers.add("content_score");
//        headers.add("method_score");
//        headers.add("result_score");
//        headers.add("total_score");
//        headers.add("level");
//
//        // 创建数据列表
//        List<Object> data = new ArrayList<>();
//        List<Object> row1 = Arrays.asList(1.,2,3,4,5,6.1,"A" );
//        List<Object> row2 = Arrays.asList(1,2,3,4,5,6,"B" );
//        List<Object> row3 = Arrays.asList(1,2,3,4,5,6,"B" );
//
//        //data.add(row1);
//        data.add(row2);
//        data.add(row3);
//
//        // 指定输出文件路径和名称
//        String filePath = "D://output.csv";
//
//        // 调用导出方法
//        exportToCSV(data, headers, filePath);
//    }
}
